package com.demo15;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class Poker {
    /**
     * @param args 1. 定义一个集合hashMap用来存储扑克牌，key是索引，value是牌
     *             2. 定义一个ArrayList存储索引值
     *             3. 打乱牌的索引值
     *             4. 定义三个玩家，用TreeSet存储玩家玩家的牌，存储的是索引
     *             5. 开始循环ArrayList 发牌
     *             6. 展示牌的封装
     */
    public static void main(String[] args) {
        //定义集合存储扑克牌
        HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
        //定义ArrayList，存储牌的索引
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        //定义扑克牌的组成元素,使用数组，实现数据组装
        String[] colors = {"♥", "♠", "♦", "♣"};
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K","A", "2"};
        String[] king = {"大王","小王"};
        //开始组装数据，数据存储map，索引存储再ArrayList中
        //定义一个索引值
        int index = 0;
        //先以数字为主要的参考，在花色处理
        for (String number : numbers) {
            for (String color : colors) {
                //增加数据操作
                hashMap.put(index, color + number);
                arrayList.add(index);
                index++;//索引自增进行下一轮循环
            }
        }
        //添加大王和小王
        for (String k :king){
            hashMap.put(index,k);
            arrayList.add(index);
            index++;
        }
        //打乱arrayList顺序
        Collections.shuffle(arrayList);
        //定义玩家的数据信息，使用排序数据结构发牌，TreeSet操作
        TreeSet<Integer> qfPoker = new TreeSet<Integer>();
        TreeSet<Integer> dyPoker = new TreeSet<Integer>();
        TreeSet<Integer> xzPoker = new TreeSet<Integer>();
        TreeSet<Integer> lastPoker = new TreeSet<Integer>();

        //开始执行发牌的操作，主要是循环ArrayList操作，我们需要用到索引索引使用普通for循环
        for (int i = 0; i < arrayList.size(); i++) {
            //获取每次循环的牌索引
            Integer ind = arrayList.get(i);
            //如果是最后的牌，则作为底牌
            if (i >= arrayList.size() - 3) {
                lastPoker.add(ind);
            } else if (i % 3 == 0) {
                qfPoker.add(ind);
            } else if (i % 3 == 1) {
                dyPoker.add(ind);
            } else if (i % 3 == 2) {
                xzPoker.add(ind);
            }
        }

        System.out.println(qfPoker);
        System.out.println(dyPoker);
        System.out.println(xzPoker);
        //看牌的操作
        lookPoker("乔峰",qfPoker,hashMap);
        lookPoker("段誉",dyPoker,hashMap);
        lookPoker("虚竹",xzPoker,hashMap);
        lookPoker("最后剩下",lastPoker,hashMap);
    }

    //定义方法实现看牌的功能操作
    public static void lookPoker(String name, TreeSet<Integer> treeSet, HashMap<Integer, String> hashMap) {
        //开始先打印对应的用户牌信息
        System.out.print(name+"的牌是:");

        //开始循环数据循环列底牌值
        for (Integer integer:treeSet){
            String poker = hashMap.get(integer);
            System.out.print(poker+" ");
        }
        System.out.println();
    }
}
